package com.base.cn.platform.os.service.agent.config;

import com.base.cn.platform.os.common.constants.CacheConstants;
import com.base.cn.platform.os.common.j2cache.CustomCacheChannel;
import com.base.cn.platform.os.common.j2cache.J2CacheRegion;
import com.base.cn.platform.os.common.mybatis.BaseBiz;
import com.base.cn.platform.os.common.utils.DataUtil;
import com.base.cn.platform.os.common.utils.ObjectUtils;
import com.base.cn.platform.os.common.utils.StringUtils;
import com.base.cn.platform.os.common.utils.result.ResultUtil;
import com.base.cn.platform.os.dao.agent.config.AgentConfigDao;
import com.base.cn.platform.os.entity.agent.config.AgentConfig;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;
import java.util.TreeMap;

/**
 * 分销配置Biz
 *
 * @author LIZHIPENG
 * @since 2018/5/4
 */
@Service
public class AgentConfigBiz extends BaseBiz<AgentConfig, AgentConfigDao> {
    private Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();

    @Autowired
    private CustomCacheChannel customCacheChannel;

    /**
     * 获取分销系统配置
     * @return
     */
    public Map<String, AgentConfig> queryAgentConfigList(){
        Map<String,AgentConfig> agentConfigMap =(Map<String,AgentConfig>)customCacheChannel.get(J2CacheRegion.SEVEN_DAY_REGION.getKey(), CacheConstants.ALL_AGENT_CONFIG_CACHE_KEY).getValue();
        if(agentConfigMap == null){
            List<AgentConfig> agentConfigList = this.find("1=1", null, null);
            if(ObjectUtils.isNotEmpty(agentConfigList)){
                this.setAgentConfigMap(agentConfigList);
                agentConfigMap = DataUtil.toMap(agentConfigList, AgentConfig::getConfigType);
                customCacheChannel.set(J2CacheRegion.SEVEN_DAY_REGION.getKey(), CacheConstants.ALL_AGENT_CONFIG_CACHE_KEY,agentConfigMap);
            }
        }
        return agentConfigMap;
    }

    /**
     * 保存分销配置
     * @param agentConfigList
     * @return
     */
    public Map<String, Object> saveAgentConfig(List<AgentConfig> agentConfigList){
        this.updateBatch(agentConfigList);
        customCacheChannel.evict(J2CacheRegion.SEVEN_DAY_REGION.getKey(),CacheConstants.ALL_AGENT_CONFIG_CACHE_KEY);
        return ResultUtil.SUCCESS("保存成功");
    }

    /**
     * 根据配置类型获取配置内容的开关
     * @param configType 配置类型
     * @return boolean
     */
    public boolean getAgentConfig(String configType){
        Map<String, AgentConfig> configMap = queryAgentConfigList();
        AgentConfig config = configMap.get(configType);
        String _switch = config.getConfigMap().get("switch");
        if("ON".equalsIgnoreCase(_switch)){
            return true;
        }else {
            return false;
        }
    }


    private void setAgentConfigMap(List<AgentConfig> agentConfigList){
        if(ObjectUtils.isNotEmpty(agentConfigList)){
            for(AgentConfig agentConfig : agentConfigList){
                String context = agentConfig.getContext();
                if(StringUtils.isNotEmpty(context)){
                    TreeMap<String, String> contextMap = gson.fromJson(context, new TypeToken<TreeMap<String, String>>() {
                    }.getType());
                    agentConfig.setConfigMap(contextMap);
                }
            }
        }
    }

}
